/**
 * 日期格式化函数
 * @param date 待格式化的日期（支持字符串、时间戳、Date 对象）
 * @param format 目标格式（默认 yyyy-MM-dd HH:mm:ss）
 * @returns 格式化后的日期字符串，空值返回空字符串
 */
export const formatDate = (
  date: string | number | Date | null | undefined,
  format: string = 'yyyy-MM-dd HH:mm:ss'
): string => {
  // 处理空值情况
  if (!date) return '';

  // 统一转换为 Date 对象
  let targetDate: Date;
  if (typeof date === 'string') {
    // 若为纯日期字符串（如 "2025-08-19"），补全默认时间 "00:00:00"
    targetDate = date.includes(' ') ? new Date(date) : new Date(`${date} 00:00:00`);
  } else if (typeof date === 'number') {
    // 若为时间戳，判断是否为毫秒级（常见 13 位），非毫秒级则转为毫秒
    targetDate = new Date(date.toString().length === 10 ? date * 1000 : date);
  } else {
    targetDate = date;
  }

  // 处理无效日期
  if (isNaN(targetDate.getTime())) return '';

  // 提取日期组件
  const year = targetDate.getFullYear();
  const month = String(targetDate.getMonth() + 1).padStart(2, '0'); // 月份 0-11，补零为 01-12
  const day = String(targetDate.getDate()).padStart(2, '0'); // 日期 1-31，补零为 01-31
  const hours = String(targetDate.getHours()).padStart(2, '0'); // 小时 0-23，补零为 00-23
  const minutes = String(targetDate.getMinutes()).padStart(2, '0'); // 分钟 0-59，补零为 00-59
  const seconds = String(targetDate.getSeconds()).padStart(2, '0'); // 秒 0-59，补零为 00-59

  // 替换格式占位符
  return format
    .replace('yyyy', year.toString())
    .replace('MM', month)
    .replace('dd', day)
    .replace('HH', hours)
    .replace('mm', minutes)
    .replace('ss', seconds);
};